#include <iostream>

using namespace std;

//函数默认参数
//如果函数声明有默认参数，那么函数实现就不能有默认参数（默认参数要么有声明在声明，没声明在实现）
int func(int a, int, int c = 2, int d = 3);
			//   ^占位参数
int func(double a, int b, int c, int d);
int func(int a, int b, int c, int d, int e);
int func(int a, double b, int c, int d);
int main() {
	int ret = func(2, 3);
	cout << ret << endl;//结果为8
	//如果调用时有传参，那就用调用的；没有就用默认参数
	cout << func(1.5, 2, 3, 4) << endl;
	cout << func(2,3,4,5,6) << endl;
	cout << func(2, 2.5, 3, 4) << endl;
	return 0;
}

//b、c设置了默认参数，如果b设置为默认参数，那么之后的参数也得设置默认参数
int func(int a, int b, int c, int d) {
	return a + b + c + d;
}

//函数重载
/*
* 同一作用域
* 名称相同
* 参数类型/个数/顺序不同
* 返回值不能作为重载条件
*/

//注意
/*
* 1、遇到默认参数时，关于函数个数的重载要注意参数要比含默认参数的函数多
* 2、引用相关（int& 和 const int&  是两个类型）
*/
int func(double a, int b, int c, int d) {
	return b + c + d;
}
int func(int a, int b, int c, int d, int e) {
	return a + b + c;
}
int func(int a, double b, int c, int d) {
	return a + c + d;
}